#ifndef TASK_MANAGER_H
#define TASK_MANAGER_H

#include <vector>
#include <memory>
#include <algorithm>
#include "Task.h"
#include "DataStore.h"


/**
 * @brief 任务管理器类
 * 
 * 负责管理所有任务，包括添加、删除、更新和查询任务
 */
class TaskManager {
public:
    /**
     * @brief 构造函数
     * @param dataStore 数据存储对象
     */
    explicit TaskManager(std::unique_ptr<DataStore> dataStore);
    
    /**
     * @brief 添加新任务
     * @param description 任务描述
     * @param priority 任务优先级
     * @param dueDate 截止日期
     * @return int 新任务的ID
     */
    int addTask(const std::string& description, Priority priority, const std::string& dueDate);
    
    /**
     * @brief 删除任务
     * @param id 要删除的任务ID
     * @return bool 是否删除成功
     */
    bool deleteTask(int id);
    
    /**
     * @brief 获取所有任务
     * @return std::vector<Task> 任务列表
     */
    std::vector<Task> getAllTasks() const;
    
    /**
     * @brief 更新任务描述
     * @param id 任务ID
     * @param newDescription 新描述
     * @return bool 是否更新成功
     */
    bool updateTaskDescription(int id, const std::string& newDescription);
    
    /**
     * @brief 更新任务优先级
     * @param id 任务ID
     * @param newPriority 新优先级
     * @return bool 是否更新成功
     */
    bool updateTaskPriority(int id, Priority newPriority);
    
    /**
     * @brief 更新任务截止日期
     * @param id 任务ID
     * @param newDueDate 新截止日期
     * @return bool 是否更新成功
     */
    bool updateTaskDueDate(int id, const std::string& newDueDate);
    
    /**
     * @brief 保存所有任务到数据存储
     */
    void saveTasks();
    
    /**
     * @brief 从数据存储加载任务
     */
    void loadTasks();
    
private:
    std::vector<Task> tasks;               ///< 任务列表
    std::unique_ptr<DataStore> dataStore;  ///< 数据存储对象
    int nextId;                           ///< 下一个可用的任务ID
    
    /**
     * @brief 查找任务迭代器
     * @param id 任务ID
     * @return std::vector<Task>::iterator 任务迭代器
     */
    std::vector<Task>::iterator findTaskById(int id);
};











#endif // TASK_MANAGER_H